const statusMap = [
  { itemValue: '10', itemName: '建设' },
  { itemValue: '40', itemName: '检修' },
  { itemValue: '30', itemName: '运行' },
  { itemValue: '60', itemName: '计划停运' },
  { itemValue: '50', itemName: '故障' },
  { itemValue: '20', itemName: '调试' },
  { itemValue: '1', itemName: '充电' },
  { itemValue: '2', itemName: '放电' },
  { itemValue: '0', itemName: '静置' },
];

export function getStatusName(itemValue: number | undefined) {
  const trimmedValue = String(itemValue).trim(); // 确保 itemValue 是字符串并删除空格
  const status = statusMap.find((item) => item.itemValue === trimmedValue);
  // 如果找到匹配的对象，返回对应的 itemName，否则返回 undefined
  return status ? status.itemName : undefined;
}

const siteTypeMap = [
  { itemValue: '1', itemName: '工商储' },
  { itemValue: '2', itemName: '微电网单独' },
  { itemValue: '3', itemName: '发电侧新能源配储' },
  { itemValue: '4', itemName: '发电侧独立储能' },
  { itemValue: '5', itemName: '发电侧火电配储' },
  { itemValue: '6', itemName: '光储充一体' },
];

export function getSiteName(itemValue: number | undefined) {
  const trimmedValue = String(itemValue).trim(); // 确保 itemValue 是字符串并删除空格
  const status = siteTypeMap.find((item) => item.itemValue === trimmedValue);
  // 如果找到匹配的对象，返回对应的 itemName，否则返回 undefined
  return status ? status.itemName : undefined;
}

export const extractFirstTwoChars = (address: string | null | undefined) => {
  return (address || '').substring(0, 2);
};

// Echarts图表字体、间距自适应
export const fitChartSize = (size: number, defalteWidth = 1920) => {
  let clientWidth =
    window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
  if (!clientWidth) return size;
  let scale = clientWidth / defalteWidth;
  return Number((size * scale).toFixed(3));
};

/**
 * 格式化功率或能量值
 * @param {number} value - 原始数值
 * @param {boolean} isPower - 是否为功率单位（默认为 false，表示能量单位）
 * @param {string} targetUnit - 目标单位（默认为空，表示自动选择单位）
 * @param {boolean} showDecimal - 是否显示小数点（默认为 true）
 * @returns {{ value: string, unit: string }} 格式化后的数值和单位
 */
export function formatPower(
  value: number | string | undefined,
  isPower: boolean = false,
  targetUnit: string = '',
  showDecimal: boolean = true,
) {
  if (value === undefined) {
    return {
      value: '--',
      unit: '',
    };
  }

  // eslint-disable-next-line no-param-reassign
  value = Number(value);
  if (isNaN(value)) {
    return {
      value: '--',
      unit: '',
    };
  }

  let unit = isPower ? 'kW' : 'kWh';
  let absValue = Math.abs(value);

  const unitMap: { [key: string]: number } = {
    kW: 1,
    kWh: 1,
    MW: 1000,
    MWh: 1000,
    GW: 1000000,
    GWh: 1000000,
  };

  if (targetUnit && unitMap[targetUnit]) {
    absValue = absValue / unitMap[targetUnit];
    unit = targetUnit;
  } else {
    if (absValue >= 1000000) {
      absValue = absValue / 1000000;
      unit = isPower ? 'GW' : 'GWh';
    } else if (absValue >= 1000) {
      absValue = absValue / 1000;
      unit = isPower ? 'MW' : 'MWh';
    }
  }

  const formattedValue = showDecimal ? absValue.toFixed(2) : Math.round(absValue).toString();

  return {
    value: formattedValue,
    unit,
  };
}

const eventMap = [
  { itemValue: '1', itemName: '事故' },
  { itemValue: '2', itemName: '告警' },
  { itemValue: '3', itemName: '通知' },
];

/**
 * 根据 itemValue 查找对应的事件类型
 * @param {string} itemValue - 服务器返回的 itemValue
 * @returns {string} - 对应的事件类型，如果未找到则返回 '未知类型'
 */
export function getEventType(itemValue: string) {
  const event = eventMap.find((event) => event.itemValue === itemValue);
  return event ? event.itemName : '--';
}
